package com.design.working.service;

import com.design.working.dto.*;
import com.design.working.vo.*;
import com.design.working.vo.admin.*;

import java.util.List;

/**
 * 管理员端服务层
 *
 * @author gavin
 * @date 2022/5/18 10:07
 */
public interface AdminService {

    /**
     * 查找未处理的学生工作申请记录
     *
     * @param pageControlDTO 分页参数
     * @return 未处理学生的工作申请记录
     */
    ResponseVO<List<AdminHandleStudentWorkApplicationVO>> selectStudentWorkApplication(PageControlDTO pageControlDTO);

    /**
     * 插入管理员对学生申请记录的审批内容
     *
     * @param uid                              管理员uid
     * @param adminHandleStudentApplicationDTO 管理员对学生申请记录的审批内容
     * @return 成功
     */
    int insertStudentApplicationHanding(Integer uid, AdminHandleStudentApplicationDTO adminHandleStudentApplicationDTO);

    /**
     * 查找申请表中学生申请工作填写的个人信息
     *
     * @param smtId 学生申请工作表中对应的个人信息记录id
     * @return 学生申请工作填写的个人信息
     */
    ResponseVO<StudentApplicationDetailVO> selectStudentApplicationDetail(Integer smtId);

    /**
     * 查找辅导员和用工部门对学生申请表的意见
     *
     * @param swaId 学生申请工作表id
     * @return 辅导员和用工部门对学生申请表的意见
     */
    ResponseVO<AdminPreAdviceVO> selectStudentPreAdvice(Integer swaId);

    /**
     * 查询学生岗位变动申请
     *
     * @param pageControlDTO 分页参数
     * @return 学生岗位变动申请的条数
     */
    ResponseVO<List<AdminHandleStudentWorkMotionVO>> selectStudentWorkMotion(PageControlDTO pageControlDTO);

    /**
     * 查找用工部门对学生岗位变更表的意见
     *
     * @param id 学生岗位变更表id
     * @return 用工部门对学生岗位变更表的意见
     */
    ResponseVO<AdminPreAdviceVO> selectDeptPreAdvice(Integer id);

    /**
     * 插入管理员处理的学生岗位变更表意见
     *
     * @param uid                         管理员uid
     * @param adminHandleStudentMotionDTO 前端传来的表单数据
     * @return 成功
     */
    int insertStudentMotionHanding(Integer uid, AdminHandleStudentMotionDTO adminHandleStudentMotionDTO);

    /**
     * 查找正在工作的学生和岗位信息
     *
     * @param pageControlDTO 分页参数
     * @return 查询到的在岗学生和岗位信息
     */
    ResponseVO<List<AdminStudentInWorkingVO>> selectAllWorking(PageControlDTO pageControlDTO);

    /**
     * 查找正在工作的学生和岗位信息（通过搜索信息）
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 查询到的在岗学生和岗位信息
     */
    ResponseVO<List<AdminStudentInWorkingVO>> selectAllWorkingByName(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * （在岗学生管理）变更岗位 - 强制将在岗学生下岗
     *
     * @param id      student_to_work的id
     * @param adminId 管理员uid
     * @return 成功
     */
    int forceResignStudent(Integer id, Integer adminId);

    /**
     * 查询学生岗位分配记录
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 岗位分配记录
     */
    ResponseVO<List<StudentWorkDistributionRecordVO>> selectWorkDistributionRecord(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询在岗学生考勤记录
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 学生考勤记录
     */
    ResponseVO<List<AdminStudentAttendanceRecordVO>> selectStudentAttendance(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询全部学生考勤记录
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 学生考勤记录
     */
    ResponseVO<List<AdminStudentAttendanceRecordVO>> selectAllAttendance(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询学生相关信息
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 学生相关信息
     */
    ResponseVO<List<StudentCommonVO>> selectStudent(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询学生详细信息
     *
     * @param uid 学生学号
     * @return 学生个人详细信息
     */
    ResponseVO<StudentMsgVO> selectStudentMsg(Integer uid);

    /**
     * 查询学生申请岗位的信息
     *
     * @param pageControlDTO 分页参数
     * @param searchDTO      搜索信息
     * @return 学生申请岗位的信息
     */
    ResponseVO<List<StudentWorkApplicationAllVO>> selectStudentApplicationRecord(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询学生岗位申请的记录
     *
     * @param swaId 学生岗位申请表id
     * @return 学生岗位申请审批记录
     */
    ResponseVO<StudentApplicationExaminationVO> selectStudentApplicationExamination(Integer swaId);

    /**
     * 查询岗位工资
     *
     * @param pageControlDTO 分页信息
     * @return 岗位工资信息
     */
    ResponseVO<List<JobSalaryVO>> selectJobSalary(PageControlDTO pageControlDTO);

    /**
     * 修改岗位工资
     *
     * @param updateJobSalaryDTO 岗位id和新工资
     * @return 成功
     */
    int updateJobSalaryById(UpdateJobSalaryDTO updateJobSalaryDTO);

    /**
     * 查询学生工资
     *
     * @param pageControlDTO 分页信息
     * @return 学生工资信息
     */
    ResponseVO<List<StudentSalarySelectionVO>> selectStudentSalary(PageControlDTO pageControlDTO);

    /**
     * 通过姓名查询学生工资
     *
     * @param pageControlDTO 分页信息
     * @param searchDTO      搜索信息
     * @return 学生工资信息
     */
    ResponseVO<List<StudentSalarySelectionVO>> selectStudentSalaryByName(PageControlDTO pageControlDTO, SearchDTO searchDTO);

    /**
     * 查询所有待审批的部门申请岗位
     *
     * @param pageControlDTO 分页参数
     * @return 所有待审批的部门申请岗位
     */
    ResponseVO<List<DeptJobApplicationVO>> selectDeptJobApplication(PageControlDTO pageControlDTO);

    /**
     * 查询部门申请岗位的详细信息
     *
     * @param id dept_job_application表的id
     * @return 相关的详细信息
     */
    ResponseVO<DeptJobApplicationDetailVO> selectDeptJobApplicationDetail(Integer id);

    /**
     * 处理对部门岗位的申请
     *
     * @param handleDeptJobApplicationDTO 前端传来的数据
     * @return 成功
     */
    int handleDeptJobApplication(HandleDeptJobApplicationDTO handleDeptJobApplicationDTO);

    /**
     * 查询所有待审批的部门岗位变更记录
     *
     * @param pageControlDTO 分页参数
     * @return 所有待审批的部门岗位变更记录
     */
    ResponseVO<List<SelectDeptJobMotionVO>> selectDeptJobMotion(PageControlDTO pageControlDTO);

    /**
     * 处理部门信息变动
     *
     * @param adminHandleDeptJobWorkMotionDTO 需要处理的数据
     * @return 成功
     */
    int insertDeptJobWorkMotionHandling(AdminHandleDeptJobWorkMotionDTO adminHandleDeptJobWorkMotionDTO);

    /**
     * 查询全部岗位申请记录
     *
     * @param pageControlDTO 分页参数
     * @return 全部岗位申请记录
     */
    ResponseVO<List<DeptJobApplicationRecordVO>> selectDeptJobApplicationRecord(PageControlDTO pageControlDTO);

    /**
     * 关键字查询岗位申请记录
     *
     * @param pageControlDTO              分页参数
     * @param searchDeptJobApplicationDTO 搜索的数据
     * @return 相关的岗位申请记录
     */
    ResponseVO<List<DeptJobApplicationRecordVO>> selectDirectDeptJobApplicationRecord(PageControlDTO pageControlDTO, SearchDeptJobApplicationDTO searchDeptJobApplicationDTO);

    /**
     * 查询岗位申请记录的审批详情
     *
     * @param id dept_job_application的id
     * @return 相关审批详情
     */
    ResponseVO<DeptJobApplicationExaminationVO> selectDeptJobApplicationExamination(Integer id);

    /**
     * 查询全部用工评价记录
     *
     * @param pageControlDTO 分页参数
     * @return 全部用工评价记录
     */
    ResponseVO<List<WorkEvaluationVO>> selectWorkEvaluation(PageControlDTO pageControlDTO);

    /**
     * 通过关键词查询部分用工评价记录
     *
     * @param pageControlDTO          分页参数
     * @param searchWorkEvaluationDTO 搜索框传入的相关参数
     * @return 部分用工评价记录
     */
    ResponseVO<List<WorkEvaluationVO>> selectWorkEvaluationByName(PageControlDTO pageControlDTO, SearchWorkEvaluationDTO searchWorkEvaluationDTO);

    /**
     * 通过id查询其对应的用工评价详细信息
     *
     * @param id dept_evaluate_student的id
     * @return 相应的用工评价详细信息
     */
    ResponseVO<WorkEvaluationDetailVO> selectWorkEvaluationDetailById(Integer id);

    /**
     * 管手动对单个学生结岗
     *
     * @param id student_to_work的id
     * @return 成功
     */
    int finishStudentWorkById(Integer id);

    /**
     * 查询某年月工资是否被统计过（实际年月的下一月，即操作月）
     * @param date 操作年月
     * @return SUCCESS - 已生成; NO - 未生成
     */
    int selectSalaryStatusByDate(String date);

    /**
     * 统计某月工资情况(通过考勤)
     * @param date 操作年月
     * @return SUCCESS - 已统计；NO - 未统计
     */
    int countSalaryByDate(String date);

    /**
     * 操作月发放工资
     * @param date 操作年月
     * @return SUCCESS - 已发放；NO - 未发放
     */
    int sendSalaryByDate(String date);
}
